Skip to content

feat: add client side tools to bridge and new cas events#1609

Open
norman-le wants to merge 1 commit intomainfrom
feat/jar-9629-client-side-tools-cas-urt
Open

feat: add client side tools to bridge and new cas events#1609
norman-le wants to merge 1 commit intomainfrom
feat/jar-9629-client-side-tools-cas-urt

Conversation

@norman-le
Copy link
Copy Markdown
Contributor

No description provided.

Copilot AI review requested due to automatic review settings May 1, 2026 21:15
@github-actions github-actions Bot added test:uipath-langchain Triggers tests in the uipath-langchain-python repository test:uipath-runtime test:uipath-integrations labels May 1, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support for “client-side tools” in agent resource modeling and extends the chat event protocol/bridge to handle additional tool-call lifecycle events (including an executingToolCall signal and new CAS event handling paths).

Changes:

  • Add ClientSide as a new AgentToolType and introduce AgentClientSideToolResourceConfig, including normalization support.
  • Extend core chat tool-call event models with executingToolCall and additional start-event fields (isClientSideTool, outputSchema).
  • Update the CLI Socket.IO chat bridge to parse endToolCall as a resume signal and add an emitter for executingToolCall.

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 4 comments.

File Description
packages/uipath/src/uipath/agent/models/agent.py Adds a new agent tool type + resource config union member and normalizes incoming tool type strings for client-side tools.
packages/uipath/src/uipath/_cli/_chat/_bridge.py Adds support for new CAS tool-call event shapes and introduces an executingToolCall emitter based on resume triggers.
packages/uipath-core/src/uipath/core/chat/tool.py Extends the chat protocol models with executingToolCall and new start-event fields to represent client-side tools.
packages/uipath-core/src/uipath/core/chat/init.py Exports the newly added UiPathConversationExecutingToolCallEvent.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +406 to +423
tool_call_id = request.get("tool_call_id")
tool_name = request.get("tool_name")
tool_input = request.get("input")

if not tool_call_id or not tool_name:
logger.info(
f"emit_executing_tool_call_event: missing tool_call_id or tool_name, skipping. tool_call_id={tool_call_id}, tool_name={tool_name}"
)
return

executing_event = UiPathConversationMessageEvent(
message_id=self._current_message_id,
tool_call=UiPathConversationToolCallEvent(
tool_call_id=tool_call_id,
executing=UiPathConversationExecutingToolCallEvent(
tool_name=tool_name,
input=tool_input,
),
Comment on lines +386 to +395
async def emit_executing_tool_call_event(
self, resume_trigger: UiPathResumeTrigger
) -> None:
"""Emit an executingToolCall event for client-side tool execution.

Only emits for triggers marked with is_execution_phase=True.
This fires exactly once per client-side tool call — for Path 3 (no confirm)
and for Path 4 (after confirmation, on the execution interrupt).
Confirmation-only interrupts (Paths 2/4 first interrupt) are skipped.
"""
Comment on lines 128 to 133
self._tool_confirmation_event = asyncio.Event()
self._tool_confirmation_value: (
UiPathConversationToolCallConfirmationEvent | None
UiPathConversationToolCallConfirmationEvent
| UiPathConversationToolCallEndEvent
| None
) = None
Comment on lines +893 to +900
class AgentClientSideToolResourceConfig(BaseAgentToolResourceConfig):
"""Resource config for client-side tools executed by the client SDK."""

type: Literal[AgentToolType.CLIENT_SIDE] = AgentToolType.CLIENT_SIDE
properties: BaseResourceProperties = Field(default_factory=BaseResourceProperties)
output_schema: Optional[Dict[str, Any]] = Field(None, alias="outputSchema")
arguments: Optional[Dict[str, Any]] = Field(default_factory=dict)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

test:uipath-integrations test:uipath-langchain Triggers tests in the uipath-langchain-python repository test:uipath-runtime

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants